home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / vim / src / vim.h < prev    next >
C/C++ Source or Header  |  1995-03-09  |  9KB  |  380 lines

  1. /* vi:ts=4:sw=4
  2.  *
  3.  * VIM - Vi IMproved        by Bram Moolenaar
  4.  *
  5.  * Read the file "credits.txt" for a list of people who contributed.
  6.  * Read the file "uganda.txt" for copying and usage conditions.
  7.  */
  8.  
  9. #if defined(SYSV_UNIX) || defined(BSD_UNIX)
  10. # ifndef UNIX
  11. #  define UNIX
  12. # endif
  13. #endif
  14.  
  15. /*
  16.  * Shorhand for unsinged variables. Many systems, but not all, have u_char
  17.  * already defined, so we use char_u to avoid trouble.
  18.  */
  19. typedef unsigned char    char_u;
  20. typedef unsigned short    short_u;
  21. typedef unsigned int    int_u;
  22. typedef unsigned long    long_u;
  23.  
  24. #include <stdio.h>
  25. #include <ctype.h>
  26.  
  27. #if !defined(DOMAIN) && !defined(NOLIMITS)
  28. # include <limits.h>        /* For INT_MAX, remove this if it does not exist */
  29. #endif
  30.  
  31. #ifdef BSD_UNIX
  32. # ifndef apollo
  33. #  include <strings.h>
  34. # endif
  35. # ifdef __STDC__
  36. #  include <string.h>
  37. # endif
  38. #else
  39. # include <string.h>
  40. #endif
  41.  
  42. #include "ascii.h"
  43. #include "keymap.h"
  44. #include "term.h"
  45. #include "macros.h"
  46.  
  47. #ifdef LATTICE
  48. # include <sys/types.h>
  49. # include <sys/stat.h>
  50. #else
  51. # ifdef _DCC
  52. #  include <sys/stat.h>
  53. # else
  54. #  ifdef MSDOS 
  55. #   include <sys\stat.h>
  56. #  else
  57. #   ifdef UNIX
  58. #     ifndef linux
  59. #      define volatile        /* needed for gcc */
  60. #      define signed            /* needed for gcc */
  61. #    endif
  62. #    include <sys/types.h>
  63. #    include <sys/stat.h>
  64. #   else
  65. #     include <stat.h>
  66. #   endif
  67. #  endif
  68. # endif
  69. #endif
  70.  
  71. #if !defined(DOMAIN) && !defined(NOSTDLIB)
  72. # include <stdlib.h>
  73. #endif
  74.  
  75. #ifdef AMIGA
  76. /*
  77.  * arpbase.h must be included before functions.h
  78.  */
  79. # include <libraries/arpbase.h>
  80.  
  81. /*
  82.  * This won't be needed if you have a version of Lattice 4.01 without broken
  83.  * break signal handling.
  84.  */
  85. # include <signal.h>
  86. #endif
  87.  
  88. #ifndef AMIGA
  89. /*
  90.  * For the Amiga we use a version of getenv that does local variables under 2.0
  91.  */
  92. # define vimgetenv(x) (char_u *)getenv((char *)x)
  93. #endif
  94.  
  95. #ifdef AZTEC_C
  96. # include <functions.h>
  97. # define __ARGS(x)    x
  98. # define __PARMS(x)    x
  99. #endif
  100.  
  101. #ifdef SASC
  102. # include <clib/exec_protos.h>
  103. # define __ARGS(x)    x
  104. # define __PARMS(x)    x
  105. #endif
  106.  
  107. #ifdef _DCC
  108. # include <functions.h>
  109. # define __ARGS(x)    x
  110. # define __PARMS(x)    x
  111. #endif
  112.  
  113. #ifdef __TURBOC__
  114. # define __ARGS(x) x
  115. #endif
  116.  
  117. #if defined(MSDOS) && !defined(NT)
  118. # include <dos.h>
  119. # include <dir.h>
  120. #endif
  121.  
  122. #ifdef SOLARIS
  123. # include <stdlib.h>
  124. #endif
  125.  
  126. #ifdef UNIX
  127. # include <unistd.h>        /* any unix that doesn't have it? */
  128. # ifdef SCO
  129. #  undef M_XENIX
  130. #  include <sys/ndir.h>        /* for MAXNAMLEN */
  131. # else
  132. #  if defined(SOLARIS) || defined(AIX) || defined(ARCHIE)
  133. #   include <dirent.h>        /* for MAXNAMLEN */
  134. #  else
  135. #   include <sys/dir.h>        /* for MAXNAMLEN */
  136. #  endif
  137. # endif
  138. # ifdef USL
  139. #  define MAXNAMLEN DIRSIZ
  140. # endif
  141. # if defined(UFS_MAXNAMLEN) && !defined(MAXNAMLEN)
  142. #  define MAXNAMLEN UFS_MAXNAMLEN        /* for dynix/ptx */
  143. # endif
  144. # if defined(NAME_MAX) && !defined(MAXNAMLEN)
  145. #  define MAXNAMLEN NAME_MAX            /* for Linux before .99p3 */
  146. # endif
  147. # if !defined(MAXNAMLEN)
  148. #  define MAXNAMLEN 512                 /* for all other Unix */
  149. # endif
  150. #endif
  151.  
  152. #ifdef UNICOS        /* would make sense for other systems too */
  153. # include <errno.h>
  154. #endif
  155.  
  156. #if defined(__STDC__) || defined(__GNUC__)
  157. # ifndef __ARGS
  158. #  define __ARGS(x) x
  159. # endif /* __ARGS */
  160. # if defined(_SEQUENT_)
  161. #  include "ptx_stdlib.h"
  162. # endif
  163. # if defined(sun) && !defined(SOLARIS)
  164. #  include "sun_stdlib.h"
  165. # endif
  166. #else /*__STDC__*/
  167. # if defined(_SEQUENT_) && !defined(_STDLIB_H_)
  168.   extern char *getenv();
  169.   extern void *malloc();
  170. # endif
  171. #endif /* __STDC__ */
  172.  
  173. #ifndef __ARGS
  174. #define __ARGS(x)    ()
  175. #endif
  176. #ifndef __PARMS
  177. #define __PARMS(x)    ()
  178. #endif
  179.  
  180. /*
  181.  * for systems that do not allow free(NULL)
  182.  */
  183. #ifdef NO_FREE_NULL
  184. # define free(x)    nofreeNULL(x)
  185.   extern void nofreeNULL __ARGS((void *));
  186. #endif
  187.  
  188. /*
  189.  * fnamecmp() is used to compare filenames.
  190.  * On some systems case in a filename does not matter, on others it does.
  191.  * (this does not account for maximum name lengths, thus it is not 100% accurate!)
  192.  */
  193. #if defined(AMIGA) || defined(MSDOS)
  194. # define fnamecmp(x, y) stricmp((char *)(x), (char *)(y))
  195. #else
  196. # define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
  197. #endif
  198.  
  199. /*
  200.  * flags for updateScreen()
  201.  * The higher the value, the higher the priority
  202.  */
  203. #define VALID                    10    /* buffer not changed */
  204. #define INVERTED                20    /* redisplay inverted part */
  205. #define VALID_TO_CURSCHAR        30    /* buffer at/below cursor changed */
  206. #define NOT_VALID                40    /* buffer changed */
  207. #define CURSUPD                    50    /* buffer changed, update cursor first */
  208. #define CLEAR                    60    /* screen messed up, clear it */
  209.  
  210. /* values for State */
  211. /*
  212.  * The lowest three bits are used to distinguish normal/cmdline/insert+replace
  213.  * mode. This is used for mapping.
  214.  */
  215. #define NORMAL                    0x01
  216. #define NORMAL_BUSY                0x11    /* busy interpreting a command */
  217. #define CMDLINE                 0x02
  218. #define INSERT                    0x04
  219. #define REPLACE                 0x24    /* replace mode */
  220. #define HELP                    0x30    /* displaying help */
  221. #define NOMAPPING                 0x40    /* no :mapping mode for vgetc() */
  222. #define ONLYKEY                 0x70    /* like NOMAPPING, but keys allowed */
  223. #define HITRETURN                0x51    /* waiting for a return */
  224. #define SETWSIZE                0x60    /* window size has changed */
  225. #define ABBREV                    0x80    /* abbreviation instead of mapping */
  226.  
  227. /* directions */
  228. #define FORWARD                  1
  229. #define BACKWARD                 -1
  230.  
  231. /* return values for functions */
  232. #define OK                        1
  233. #define FAIL                    0
  234.  
  235. /* for GetChars */
  236. #define T_PEEK                    1    /* do not wait at all */
  237. #define T_WAIT                    2    /* wait for a short time */
  238. #define T_BLOCK                    3    /* wait forever */
  239.  
  240. #define VISUALLINE            MAXCOL    /* Visual is linewise */
  241.  
  242. #ifdef WEBB_COMPLETE
  243. /*
  244.  * values for command line completion
  245.  */
  246. #define CONTEXT_UNKNOWN            -2
  247. #define EXPAND_UNSUCCESSFUL        -1
  248. #define EXPAND_NOTHING            0
  249. #define EXPAND_COMMANDS            1
  250. #define EXPAND_FILES            2
  251. #define EXPAND_DIRECTORIES        3
  252. #define EXPAND_SETTINGS            4
  253. #define EXPAND_BOOL_SETTINGS    5
  254. #define EXPAND_TAGS                6
  255. #endif /* WEBB_COMPLETE */
  256. /*
  257.  * Boolean constants
  258.  */
  259. #ifndef TRUE
  260. #define FALSE    (0)            /* note: this is an int, not a long! */
  261. #define TRUE    (1)
  262. #endif
  263.  
  264. /*
  265.  * Maximum and minimum screen size (height is unlimited)
  266.  */
  267. #ifdef UNIX
  268. # define MAX_COLUMNS     1024L
  269. #else
  270. # define MAX_COLUMNS     255L
  271. #endif
  272. #define MIN_COLUMNS        5
  273. #define MIN_ROWS        1
  274. #define STATUS_HEIGHT    1        /* height of a status line under a window */
  275.  
  276. /*
  277.  * Buffer sizes
  278.  */
  279. #ifdef UNIX        /* Unix has plenty of memory */
  280. # define CMDBUFFSIZE    1024    /* size of the command processing buffer */
  281. #else
  282. # define CMDBUFFSIZE    256        /* size of the command processing buffer */
  283. #endif
  284.  
  285. #define LSIZE        512            /* max. size of a line in the tags file */
  286.  
  287. #define IOSIZE       (1024+1)     /* file i/o and sprintf buffer size */
  288.  
  289. #define    TERMBUFSIZE    1024
  290.  
  291. #ifdef linux
  292. # define TBUFSZ 2048            /* buffer size for termcap entry */
  293. #else
  294. # define TBUFSZ 1024            /* buffer size for termcap entry */
  295. #endif
  296.  
  297. /*
  298.  * maximum length of a file name path
  299.  */
  300. #ifdef UNIX
  301. # define MAXPATHL    1024        /* Unix has long paths and plenty of memory */
  302. #else
  303. # define MAXPATHL    128            /* not too long to put name on stack */
  304. #endif
  305.  
  306. #ifdef MSDOS
  307. # define WRITEBIN    "wb"        /* no CR-LF translation */
  308. # define READBIN    "rb"
  309. # define APPENDBIN    "ab"
  310. #else
  311. # define WRITEBIN    "w"
  312. # define READBIN    "r"
  313. # define APPENDBIN    "a"
  314. #endif
  315.  
  316. #define CHANGED           set_Changed()
  317. #define UNCHANGED(buf)    unset_Changed(buf)
  318.  
  319. /*
  320.  * defines to avoid typecasts from (char_u *) to (char *) and back
  321.  */
  322. #define STRCHR(s, c)        (char_u *)strchr((char *)(s), c)
  323. #define STRRCHR(s, c)        (char_u *)strrchr((char *)(s), c)
  324. #define STRLEN(s)            strlen((char *)(s))
  325. #define STRCPY(d, s)        strcpy((char *)(d), (char *)(s))
  326. #define STRNCPY(d, s, n)    strncpy((char *)(d), (char *)(s), n)
  327. #define STRCMP(d, s)        strcmp((char *)(d), (char *)(s))
  328. #define STRNCMP(d, s, n)    strncmp((char *)(d), (char *)(s), n)
  329. #define STRCAT(d, s)        strcat((char *)(d), (char *)(s))
  330.  
  331. #define MSG(s)                msg((char_u *)(s))
  332. #define EMSG(s)                emsg((char_u *)(s))
  333. #define EMSG2(s, p)            emsg2((char_u *)(s), (char_u *)(p))
  334. #define OUTSTR(s)            outstr((char_u *)(s))
  335. #define OUTSTRN(s)            outstrn((char_u *)(s))
  336.  
  337. typedef long            linenr_t;    /* line number type */
  338. typedef unsigned        colnr_t;    /* column number type */
  339.  
  340. #define MAXLNUM (0x7fffffff)        /* maximum (invalid) line number */
  341. #ifdef INT_MAX
  342. # define MAXCOL    INT_MAX                /* maximum column number */
  343. #else
  344. # define MAXCOL    32767                /* maximum column number, 15 bits */
  345. #endif
  346.  
  347. /*
  348.  * Some versions of isspace() handle Meta characters like a space!
  349.  * This define fixes that.
  350.  */
  351. #ifdef VIM_ISSPACE
  352. # ifdef isspace
  353. #  undef isspace
  354. # endif /* isspace */
  355. # define isspace(x)  (((x) >= 9 && (x) <= 13) || ((x) == 32))
  356. #endif /* VIM_ISSPACE */
  357.  
  358. /*
  359.  * iswhite() is used for "^" and the like
  360.  */
  361. #define iswhite(x)    ((x) == ' ' || (x) == '\t')
  362.  
  363. #include "structs.h"        /* file that defines many structures */
  364.  
  365. #ifdef AMIGA
  366. # include "amiga.h"
  367. #endif
  368.  
  369. #ifdef ARCHIE
  370. # include "archie.h"
  371. #endif
  372.  
  373. #ifdef MSDOS
  374. # include "msdos.h"
  375. #endif
  376.  
  377. #ifdef UNIX
  378. # include "unix.h"
  379. #endif
  380.